
#include "iostream"
#include "vector"
#include "unordered_map"
#include "unordered_set"
#include "algorithm"
#include "string"
#include "list"
#include "string.h"

class BigNum{

public:
    std::string num;
    BigNum(std::string s){
        num=s;
    }
    BigNum(int i){
        while(i){
            num=char('0'+i%10)+num;
            i/=10;
        }
    }
    BigNum(){}
    void set_wei(int w,int v){
        while (w>=num.size()){
            num='0'+num;
        }
        num[num.size()-w-1]=v+'0';
    }
    int get_wei(int w){
        if(w>=num.size()){
            return 0;
        }
        return num[num.size()-w-1]-'0';
    }
};
BigNum multiple(BigNum a,BigNum b){
    BigNum c;
    for(int i=0;i<b.num.size();i++){
        int n1=b.get_wei(i);
        int jw=0;
        for(int j=0;j<a.num.size();j++){
            int n2=a.get_wei(j);
            int n3=c.get_wei(i+j);
            int dqw=(n1*n2+jw+n3)%10;
            jw=(n1*n2+jw+n3)/10;
            c.set_wei(i+j,dqw);
        }
        if(jw){
            c.set_wei(c.num.size(),jw);
        }
    }
    return c;
}
class OneLoop{
public:
    std::vector<int> num;
    OneLoop(){
    }
    void run(int n){
        BigNum n1(1);
        for(int i=2;i<=n;i++){
            BigNum n2(i);
            n1= multiple(n1,n2);
        }
        std::cout<<n1.num<<std::endl;
    }
};
class Solution {
public:
    void run() {

        bool first = true;
        int a;
        while (std::cin>>a) {
            OneLoop loop;
            loop.run(a);
        }
    }
};

int main() {
//    bool cur_num= true;
    Solution().run();
    return 0;
}

